var express = require('express');
var router = express.Router();
var { messageModel } = require('../module/zhangyongwei')
const smsClient = require('@alicloud/sms-sdk');
const bcrypt = require('bcryptjs')

// 将用户之间的聊天消息添加到数据库中，并根据操作结果返回相应的响应信息。
router.post('/addMessage', async (req, res, next) => {
  // 异常处理
  try {
    const { from, to, message } = req.body
    // 对其进行验证检查 from 和 to 是否为有效的用户标识，message 是否为空。确保它们是有效的数据。
    if (!from ||!to ||!message) {
      return res.status(400).json({ error: '所有字段from、to和message" 都是必须的' });
    }
    // create 方法：用于在数据库中创建一个新的文档。这里创建的文档包含三个字段
    const data = await messageModel.create({
      // message：是一个对象，其中 text 属性存储消息的具体内容。
      message: { text: message },
      // users：是一个数组，包含消息的发送者和接收者。
      users: [from, to],
      // sender：存储消息的发送者。
      sender: from,
    })
    // 如果 data 存在，说明消息成功添加到数据库，返回一个包含成功信息的 JSON 对象。
    // 如果 data 不存在，说明消息添加失败，返回一个包含失败信息的 JSON 对象。
    if (data) return res.json({ msg: "消息添加成功" })
    return res.json({ msg: "消息无法添加到数据库" })
  } catch (err) {
    next(err)
    console.log(err)
  }
})


// 从数据库中获取两个用户之间的所有聊天消息，并将这些消息进行处理后返回给客户端。
router.post('/getAllMessage', async (req, res, next) => {
  // 异常处理

  try {
    const { from, to } = req.body
    // 获取 from 和 to 变量后，应该对其进行验证，确保它们是有效的用户标识。
    if (!from || !to) {
      return res.status(400).json({ error: 'form和to都需要' })
    }
    // find 方法：用于查询符合条件的文档。
    const messages = await messageModel.find({
      // 查询条件，表示 users 数组必须同时包含 from 和 to 这两个值，即查询这两个用户之间的所有消息。
      users: {
        $all: [from, to]
      },
      // 对查询结果按照 updatedAt 字段进行升序排序，确保消息按时间顺序返回。
    }).sort({ updatedAt: 1 });
    // messages.map：对查询结果数组中的每个消息对象进行处理。
    const projectMessages = messages.map((msg) => {
      return {
        // 判断消息是否是由 from 用户发送的，返回一个布尔值。
        fromSelf: msg.sender.toString() === from,
        // 提取消息的文本内容。  
        message: msg.message.text,
      };
    });
    // 将处理后的消息数组以 JSON 格式返回给客户端。
    res.json(projectMessages)

  } catch (err) {
    next(err)
  }
})


module.exports = router;
